package com.ht.demo.dao.dao.system;

import com.ht.demo.common.pojo.qto.system.SysRoleMenuQTO;
import com.ht.demo.dao.domain.system.SysRoleMenuDO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Set;

/**
 * 角色和菜单关联表 DAO接口
 * 
 * @Author hdx
 * @Date 2023年04月28日
 */
@Mapper 
public interface SysRoleMenuDao {

    /**
     * 
     * 方法insert的功能描述：新增角色和菜单关联表
     * 
     * @param record
     * @return int
     * <PRE>
     * author hdx 
     * Date 2023年04月28日
     * </PRE>
     */
    int insert(SysRoleMenuDO record);

    /**
     * 
     * 方法deleteById的功能描述：根据Id删除角色和菜单关联表
     * 
     * @param id
     * @return int
     * <PRE>
     * author hdx 
     * Date 2023年04月28日
     * </PRE>
     */
    int deleteById(Long id);

    /**
     * 
     * 方法updateById的功能描述：根据Id更新角色和菜单关联表
     * 
     * @param record
     * @return int
     * <PRE>
     * author hdx 
     * Date 2023年04月28日
     * </PRE>
     */
    int updateById(SysRoleMenuDO record);

    /**
     * 
     * 方法findById的功能描述：根据Id查询角色和菜单关联表
     * 
     * @param id
     * @return SysRoleMenuDO
     * <PRE>
     * author hdx 
     * Date 2023年04月28日
     * </PRE>
     */
    SysRoleMenuDO findById(Long id);

    List<SysRoleMenuDO> findByCondition(SysRoleMenuDO record);

    Integer findForPageCount(SysRoleMenuQTO qto);
    List<SysRoleMenuDO> findForPage(SysRoleMenuQTO qto);

    List<Long> findMenuIdsByRoleId(@Param("sysRoleId") Long sysRoleId);

    Set<String> findPermissionByRoleId(@Param("sysRoleId") Long sysRoleId);

    Integer deleteByRoleId(@Param("sysRoleId") Long sysRoleId);

    Integer deleteByMenuId(@Param("sysMenuId") Long sysMenuId);

    Integer countPermission(@Param("perms") String permissionId, @Param("sysRoleId") Long sysRoleId);
}